<?php
include_once 'Roof/deperditionRoof.php';
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of deperditionTransmission
 *
 * @author StdF
 */
class deperditionTransmission {
    
    public $te; //Température extérieure
    public $ti; //Température ambiante inrérieure
    public $textra; //Extrapolation - supplément de régulation
    public $tc = 365; //Durée de la période de calcul
    
    public $roofDep; //Déperdition du toit
    public $ceilingDep ; //Déperdition pour le plafond
    public $wallsDep; //Déperdition pour les murs
    public $floorDep; //Déperdition pour le plancher
    public $zenWindowsDep; //Déperdition pour les fenêtres zénithales
    public $windowsDep; //Déperdition pour les fenêtres
    
    public $algoRoof; //Classe de calcul pour le toit
    public $algoCeiling; //Classe de calcul pour le plafond
    public $algoWalls; //Classe de calcul pour les murs
    public $algoFloor; //Classe de calcul pour le plancher
    public $algoZenWindows; //Classe de calcul pour les fenêtres zénithales
    public $algoWindows; //Classe de clacul pour les fenêtres
    
    public $totalDeperdition; //Déperdition totale des éléments de la maison
    public $transmissionDep; //Déperdition par transmission
    
    public $ventilationValue; //Valeur du débit d'air neuf rapporté à SRE (DB)
    public $volumetricHeatCapacity; //Capacité thermique volumique 
    
    //Fonction qui calcul la déperdition par transmission avec l'object house et l'altitude de la maison
    function getTransmissionDeperdition($house, $elevation){
        
        //Récupération de la température extérieure selon la ville de résidence
        $this->te = DBAccess::getExTemp($house->idCity);
        
         //Récupération du supplément de régulation pour la température ambiante
        $this->textra = DBAccess::getTempExtrapolation($house->year);
        //Température exemple
        $this->ti = $house->roomsTemp;
        $this->ti = $this->ti + $this->textra;
        
        //Si le toit est pris dans le calcul
        if($house->roof != null){
            //Appel de l'algo de déperdition du toi
            $this->algoRoof = new AlgoRoof(); 
            $this->roofDep = $this->algoRoof->getTotalDepertitionRoof($house);
        }
        else{
            //Si le toit n'est pas pris dans le calcul
            $this->roofDep = 1;
        }
        
        //Si le plafond est pris dans le calcul
        if($house->ceiling != null){
            //Appel de l'algo de déperdition du toi
            $this->algoCeiling = new AlgoCeiling(); 
            $this->ceilingDep = $this->algoCeiling->getTotalDeperditionCeiling($house);
        }
        else{
            //Si le plafond n'est pas pris dans le calcul
            $this->ceilingDep = 1;
        }
        
         //Pour les murs qui sont pris dans le calcul
        if($house->walls != null){
            //Appel de l'algo de déperdition du toi
            $this->algoWalls = new AlgoWall(); 
            $this->wallsDep = $this->algoWalls->getTotalDeperdition($house);
        }
        else{
            //Si les murs ne sont pas pris dans le calcul
            $this->wallsDep = 1;
        }
        
        //Pour le plancher qui est pris dans le calcul
        if($house->floor != null){
            //Appel de l'algo de déperdition du toi
            $this->algoFloor = new AlgoFloor(); 
            $this->floorDep = $this->algoFloor->getTotalDeperditionFloor($house);
        }
        else{
            //Si le placncher n'est pas pris dans le calcul
            $this->floorDep = 1;
        }
        
        //Pour les fenêtres prises dans le calcul
        if($house->walls[0]->windows != null){
            //Appel de l'algo de déperdition du toi
            $this->algoWindows = new AlgoWindows(); 
            $this->windowsDep = $this->algoWindows->getTotalDepertitionWindows($house);
        }
        else{
            //Si le toit n'est pas pris dans le calcul
            $this->windowsDep = 1;
        }
        
        //Pour les fenêtres zénithales prises dans le calcul
        if($house->zenithalWindows != null){
            //Appel de l'algo de déperdition du toi
            $this->algoZenWindows = new AlgoZenithalWindows(); 
            $this->zenWindowsDep = $this->algoZenWindows->getTotalDeperditionZenithalWindow($house);
        }
        else{
            //Si le toit n'est pas pris dans le calcul
            $this->zenWindowsDep = 1;
        }
        
        //Calcul de la déperdition totale des éléments de la maison
        $this->totalDeperdition = $this->roofDep + $this->ceilingDep + $this->wallsDep + $this->floorDep + $this->zenWindowsDep + $this->windowsDep;
        
        //Récupération du débit d'air neuf rapporté à SRE
        $this->ventilationValue = DBAccess::getVentilationValue($house->year);
        
        //Calcul de la capacité thermique volumique
        $this->volumetricHeatCapacity = (1220 - (0.14 * $elevation));
        
        //Calcul de la déperdition par transmission
        $this->transmissionDep = $this->totalDeperdition + (($this->ti - $this->te) * $this->ventilationValue * $this->tc * $this->volumetricHeatCapacity * (24 / 1000000));
        
        //Si la déperdition totale est plus petite ou égale à zéro
        if($this->transmissionDep > 0){
            return $this->transmissionDep;
        }
        else
            return 0;
        
    }
}
?>